package com.myzl.coal.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.myzl.coal.domain.Device;
import com.myzl.common.core.domain.AjaxResult;

import java.util.List;
import java.util.Map;

/**
 * 设备表Service接口
 *
 * @author myzl
 * @date 2022-09-01
 */
public interface IDeviceService extends IService<Device>
{
    /**
     * 查询设备表
     *
     * @param id 设备表主键
     * @return 设备表
     */
    public Device selectDeviceById(Integer id);

    /**
     * 设备缓存查询
     * @param id 设备编号
     * @return 结果
     */
    public Device cacheDeviceById (Integer id);

    /**
     * 缓存设备信息
     * @param ip ip
     * @param port 端口
     * @return 设备实体
     */
    public Device cacheDeviceByUrl (String ip,Integer port);
    /**
     * 查询设备表列表
     *
     * @param device 设备表
     * @return 设备表集合
     */
    public List<Device> selectDeviceList(Device device);

    /**
     * 新增设备表
     *
     * @param device 设备表
     * @return 结果
     */
    public int insertDevice(Device device);

    /**
     * 修改设备表
     *
     * @param device 设备表
     * @return 结果
     */
    public int updateDevice(Device device);

    /**
     * 批量删除设备表
     *
     * @param ids 需要删除的设备表主键集合
     * @return 结果
     */
    public int deleteDeviceByIds(String[] ids);

    /**
     * 删除设备表信息
     *
     * @param id 设备表主键
     * @return 结果
     */
    public int deleteDeviceById(String id);

    /**
     * 设置设备密度及速度
     * @param device 设备数据
     * @return 结果
     */
    AjaxResult configDensity(Device device);
    /**
     * 获取设备实时数据
     * @param deviceId 设备编号
     * @return 结果
     */
    AjaxResult getTrendChart(Long deviceId);
    /**
     * 获取双目设备
     * @param deviceType 设备类型
     * @return 结果
     */
    List<Device> getDeviceByType(int deviceType);

    /**
     * 通过设备组获取设备
     * getDeviceByGroup
     * @param groupType
     * @param deviceType
     * @return java.util.List<com.myzl.coal.domain.Device>
     * @author  wzb
     * @date 2022/11/22
     * @description
     */
    List<Device> getDeviceByGroup(Integer groupType,Integer deviceType);

    List<Device> getDeviceByGroupId(Integer groupId,Integer deviceType);

    /**
     * 根据设备id查询摄像头
     * @param deviceId 设备id
     * @return 摄像头
     */
    List<Device> getCamera(Integer deviceId);

    /**
     * 根据父级设备组查询设备
     * @param parentGroupId 父级设备组编号
     * @return 设备集合
     */
    AjaxResult getSieveList(String parentGroupId);

    /**
     * 查询设备参数
     * @param deviceId 设备id
     * @param dictValues 设备参数类型
     * @return 设备参数集合
     */
    Map<Integer,String> getDeviceParam(String deviceId, List<String> dictValues);

    /**
     * 保存设备参数
     * @param deviceParam 设备参数
     * @return 结果
     */
    AjaxResult saveDeviceParam(Map<String , String> deviceParam);

    /**
     * 获取设备
     * @param device 设备信息
     * @return 设备信息
     */
    Device getDevice(Device device);

    /**
     * 根据设备id查询摄像头
     * @param deviceId 设备id
     * @return 摄像头
     */
    AjaxResult getLEDDevice(Integer deviceId);

    /**
     * 通过设备类型查询设备
     * @param deviceType 设备类型
     * @return 设备
     */
    public Device getDeviceByDeviceType(Integer deviceType);
    public List<Device> getDeviceByDeviceTypeList(Integer deviceType);

    /**
     * 修改设备配置数据
     * @param device 设备参数
     * @return 结果
     */
    public Device replaceConfig(Device device);


    /**
     * led缓存存储
     * @param device 设备
     * @return 结果
     */
    public boolean ledConfigCache(Device device);

    /**
     * 密度校验
     * @param device 设备
     * @return 结果
     */
    public boolean validateDensity(Device device);

}
